/**
 * @DateUtils.java  COPYRIGHT xiaojian
 * 
 * Created on 2018年8月24日 下午3:17:26
 */
package xj.toolkit.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import com.google.common.base.Preconditions;

/**
 * @author <a href="mailto:cxj2000@gmail.com">xiaojian.cao</a>
 *
 */
public class DateUtils {

	/**
	 * 得到某天的23点59分59秒的unix时间。
	 * 
	 * @param date
	 * @return
	 */
	public static long getDayEnd(Date date) {
		if (date == null) {
			date = new Date();
		}

		String string = new SimpleDateFormat("yyyy-MM-dd").format(date);
		Date dayEnd = null;
		try {
			dayEnd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(string + " 23:59:59");
		} catch (ParseException e) {
			return 0;
		}

		return dayEnd.getTime() / 1000;
	}

	/**
	 * 得到某天的23点59分59秒的时间对象。
	 * 
	 * @param date
	 * @return
	 */
	public static Date getDayEndAsObj(Date date) {
		if (date == null) {
			date = new Date();
		}

		String string = new SimpleDateFormat("yyyy-MM-dd").format(date);
		try {
			return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(string + " 23:59:59");
		} catch (ParseException e) {
			return null;
		}
	}

	/**
	 * 得到某天的00点00分00秒的unix时间。
	 * 
	 * @param date
	 * @return
	 */
	public static long getDayStart(Date date) {
		if (date == null) {
			date = new Date();
		}

		String string = new SimpleDateFormat("yyyy-MM-dd").format(date);
		Date dayEnd = null;
		try {
			dayEnd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(string + " 00:00:00");
		} catch (ParseException e) {
			return 0;
		}

		return dayEnd.getTime() / 1000;
	}

	/**
	 * 得到某天的00点00分00秒的unix时间。
	 * 
	 * @param date
	 * @return
	 */
	public static Date getDayStartAsObj(Date date) {
		if (date == null) {
			date = new Date();
		}

		String string = new SimpleDateFormat("yyyy-MM-dd").format(date);
		try {
			return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(string + " 00:00:00");
		} catch (ParseException e) {
			return null;
		}
	}

	/**
	 * 两个日期相差的天数。
	 * 
	 * @param date1
	 * @param date2
	 * @return
	 */
	public static int daysBetween(Date date1, Date date2) {
		Preconditions.checkArgument(date1 != null);
		Preconditions.checkArgument(date2 != null);

		return (int) ((date2.getTime() - date1.getTime()) / (1000 * 60 * 60 * 24));
	}

	/**
	 * 两个日期相差的分钟。
	 * 
	 * @param date1
	 * @param date2
	 * @return
	 */
	public static int minBetween(Date date1, Date date2) {
		Preconditions.checkArgument(date1 != null);
		Preconditions.checkArgument(date2 != null);

		return (int) ((date2.getTime() - date1.getTime()) / (1000 * 60));
	}
}
